# Bf命令

# BF.ADD

# 语法

BF.ADD key item

# 描述

向布隆过滤器中添加一个元素。该命令与 BF.MADD 类似,区别在于它每次只能添加单个元素

# 参数

  • key

键名

  • item

需要添加的元素

# 示例

> BF.ADD bf item1
(integer) 1
> BF.ADD bf item1
(integer) 0

# BF.CARD

# 语法

BF.CARD key

# 描述

返回布隆过滤器的基数,即被添加到布隆过滤器中并被识别为唯一的元素数量

# 参数

  • key

键名

# 示例

> BF.ADD bf1 item_foo
(integer) 1
> BF.CARD bf1
(integer) 1
> BF.CARD bf_new
(integer) 0

# BF.EXISTS

# 语法

BF.EXISTS key item

# 描述

判断给定元素是否已被添加到布隆过滤器中

# 参数

  • key

键名

  • item

需要检查的元素

# 示例

> BF.ADD bf item1
(integer) 1
> BF.EXISTS bf item1
(integer) 1
> BF.EXISTS bf item2
(integer) 0

# BF.INFO

# 语法

BF.INFO key [CAPACITY | SIZE | FILTERS | ITEMS | EXPANSION]

# 描述

从过滤器中删除一次该元素。如果该元素仅存在一次,它将被彻底移除;如果该元素被添加了多次,它仍会保留在过滤器中

# 参数

  • key

键名

  • item

返回添加到该布隆过滤器中并被识别为唯一的元素数量

  • CAPACITY

返回此布隆过滤器在需要扩容前,能够存储的唯一元素数量

  • size

返回内存大小。为该布隆过滤器分配的字节数

  • FILTERS

返回子过滤器的数量

# 示例

> BF.ADD bf1 observation1
(integer) 1
> BF.INFO bf1
 1) Capacity
 2) (integer) 100
 3) Size
 4) (integer) 240
 5) Number of filters
 6) (integer) 1
 7) Number of items inserted
 8) (integer) 1
 9) Expansion rate
10) (integer) 2
> BF.INFO bf1 CAPACITY
1) (integer) 100

# BF.INSERT

# 语法

BF.INSERT key [CAPACITY capacity] [ERROR error]
  [EXPANSION expansion] [NOCREATE] [NONSCALING] ITEMS item [item
  ...]

# 描述

如果指定的键不存在,则使用给定的错误率、容量和扩展参数创建一个新的布隆过滤器,并将所有指定的元素添加到该过滤器中

# 参数

  • key

键名

  • item

要添加的元素

  • CAPACITY

指定待创建过滤器的预期容量。如果过滤器已存在,则忽略此参数。如果过滤器被自动创建且未提供此参数,则将使用模块级别的默认容量

  • ERROR

如果过滤器尚不存在,则指定新创建过滤器的错误率。如果过滤器是自动创建的且未指定错误率,则将使用模块级别的默认错误率

  • NONSCALING

当达到初始容量上限时,该过滤器不会再创建额外的子过滤器。相比支持自动扩容的版本,这种不可扩容的过滤器能稍微节省一点内存。不过要注意,一旦容量用尽,过滤器就会直接返回错误

  • EXPANSION

当达到容量上限时,系统会创建一个新的子过滤器。新子过滤器的大小等于上一个子过滤器的大小乘以扩容倍数(该倍数需指定为一个正整数)

# 示例

BF.INSERT filter ITEMS foo bar baz

BF.INSERT filter CAPACITY 10000 ITEMS hello

BF.INSERT filter NOCREATE ITEMS foo bar

# BF.LOADCHUNK

# 语法

BF.LOADCHUNK key iterator data

# 描述

恢复之前通过 BF.SCANDUMP 命令保存的布隆过滤器

# 参数

  • key

键名

  • iteractor

与数据关联的迭代器值

  • data

当前数据分块


# BF.MADD

# 语法

BF.MADD key item [item ...]

# 描述

向布隆过滤器中添加一个或多个元素。此命令类似于 BF.ADD,但支持一次添加多个元素;它也类似于 BF.INSERT,但无法指定错误率、容量和扩容倍数

# 参数

  • key

键名

  • item

需要添加的元素

# 示例

> BF.MADD bf item1 item2 item2
1) (integer) 1
2) (integer) 1
3) (integer) 0

# BF.MEXISTS

# 语法

BF.MEXISTS key item [item ...]

# 描述

判断一个或多个元素是否已被添加到布隆过滤器中。此命令类似于 BF.EXISTS,不同之处在于它支持同时检查多个元素

# 参数

  • key

键名

  • item

需要添加的元素

# 示例

> BF.MADD bf item1 item2
1) (integer) 1
2) (integer) 1
> BF.MEXISTS bf item1 item2 item3
1) (integer) 1
2) (integer) 1
3) (integer) 0

# BF.RESERVE

# 语法

BF.RESERVE key error_rate capacity [EXPANSION expansion]
  [NONSCALING]

# 描述

创建一个空的布隆过滤器,其初始容量包含一个子过滤器,并设定错误率的上限。默认情况下,当达到容量上限时,过滤器会自动扩容。新创建的子过滤器大小,等于上一个子过滤器的大小乘以扩容倍数

# 参数

  • key

键名

  • CAPACITY

指定待创建过滤器的预期容量。如果过滤器已存在,则忽略此参数。如果过滤器被自动创建且未提供此参数,则将使用模块级别的默认容量

  • error_rate

期望的误判率。该比率是一个介于 0 到 1 之间的小数值。例如,若期望的误判率为 0.1%,则应将 error_rate 设置为 0.001

  • NONSCALING

当达到初始容量上限时,该过滤器不会再创建额外的子过滤器。相比支持自动扩容的版本,这种不可扩容的过滤器能稍微节省一点内存。不过要注意,一旦容量用尽,过滤器就会直接返回错误

  • EXPANSION

当达到容量上限时,系统会创建一个新的子过滤器。新子过滤器的大小等于上一个子过滤器的大小乘以扩容倍数(该倍数需指定为一个正整数)

# 示例

redis> BF.RESERVE bf 0.01 1000
OK

> BF.RESERVE bf 0.01 1000
(error) ERR item exists

> BF.RESERVE bf_exp 0.01 1000 EXPANSION 2
OK

> BF.RESERVE bf_non 0.01 1000 NONSCALING
OK

# BF.SCANDUMP

# 语法

BF.SCANDUMP key iterator

# 描述

开始对布隆过滤器进行增量保存。当布隆过滤器体积过大,无法适用 DUMP 和 RESTORE 模式时,该命令非常有用

# 参数

  • key

键名

  • iteractor

与数据关联的迭代器值

# 示例

> BF.RESERVE bf 0.1 10
OK
> BF.ADD bf item1
1) (integer) 1
> BF.SCANDUMP bf 0
1) (integer) 1
2) "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x9a\x99\x99\x99\x99\x99\xa9?J\xf7\xd4\x9e\xde\xf0\x18@\x05\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00"
> BF.SCANDUMP bf 1
1) (integer) 9
2) "\x01\b\x00\x80\x00\x04 \x00"
> BF.SCANDUMP bf 9
1) (integer) 0
2) ""
> DEL bf
(integer) 1
> BF.LOADCHUNK bf 1 "\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x9a\x99\x99\x99\x99\x99\xa9?J\xf7\xd4\x9e\xde\xf0\x18@\x05\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00"
OK
> BF.LOADCHUNK bf 9 "\x01\b\x00\x80\x00\x04 \x00"
OK
> BF.EXISTS bf item1
(integer) 1